/*
 * CaracteresHandler.h
 *
 *  Created on: 26/11/2011
 *      Author: putaro
 */
#include <string>
#include "AsistenteObtencionDeTerminos.h"

#ifndef CARACTERESHANDLER_H_
#define CARACTERESHANDLER_H_

using namespace std;

/*
 * Es un clase utilitaria que provee una batería de métodos para operar sobre
 * caracteres en forma correcta.
 */
class CaracteresHandler {

public:

	/*
	 * Pre:-
	 * Post: Se agregado un nuevo caracter al string correspondiente.
	 * La codificación del caracter de entrada debe ser en UTF-8, de manera tal que
	 * si se prensetase un caracter de más de un byte este método recuperará los
	 * caracteres necesarios del archivo de entrada.
	 * Los carácteres castellanos acentuados, con dierisis o en minúscula, se convierten
	 * a sus respectivas mayúsculas sin acentuar.
	 * Un carácter UTF8 puede implicar que se guarde en termino varios tipos de datos
	 * char.
	 * Para los carácteres de más de un byte el término no coincirá con su equivalente UTF8
	 * sino que será una codificación propia de este programa.
	 * Returns: True si el carácter es válido para formar parte de un término.
	 */
	static bool procesarCaracter(const char caracter , bool & isNumerico ,
								string & termino , AsistenteObtencionDeTerminos &asistente ,
								ifstream & archivo);
private:

	/*
	 * Pre:
	 * Post: Se ha procesado un caracter en UTF8 comprobando si corresponde a dicho tipo
	 * de formato.
	 */
	static bool procesarUTF(const char caracter , bool & isNumerico ,
								string & termino , AsistenteObtencionDeTerminos &asistente,
								ifstream & archivo);

	/*
	 * Pre:-
	 * Post: Se ha procesado un caracter en UTF8.
	 */
	static bool procesarUTF8(const char caracter , bool & isNumerico ,
										string & termino , AsistenteObtencionDeTerminos &asistente,
										ifstream & archivo);
	/*
	 * Pre:-
	 * Post: Se ha convertido el caracter según corresponda.
	 */
	static void convertirCaracter(const char caracter , string & termino);

	CaracteresHandler();
	virtual ~CaracteresHandler();
};

#endif /* CARACTERESHANDLER_H_ */
